export function latlngToString({lat, lng}) {
  let latDegree = lat ? parseInt(lat, 10) : '';
  let latMinute = lat ? parseInt((lat - latDegree) * 60, 10) : '';
  let latSecond = lat ? Math.round(((lat - latDegree) * 60 - latMinute) * 60 * 100) / 100 : '';

  let lngDegree = lng ? parseInt(lng, 10) : '';
  let lngMinute = lng ? parseInt((lng - lngDegree) * 60, 10) : '';
  let lngSecond = lng ? Math.round(((lng - lngDegree) * 60 - lngMinute) * 60 * 100) / 100 : '';

  return {
    lat: {
      degree: latDegree,
      minute: latMinute,
      second: latSecond,
      text: `${latDegree}°${latMinute}'${latSecond}"`
    },
    lng: {
      degree: lngDegree,
      minute: lngMinute,
      second: lngSecond,
      text: `${lngDegree}°${lngMinute}'${lngSecond}"`
    }
  }
}

export function dmsToLatLng(d, m, s) {
  let ret = parseFloat(d) + (parseFloat(s) / 60 + parseFloat(m)) / 60;
  // console.log('d m s', d, m, s, ret);
  return ret;
}

export function latlngToDmsString(lat, lng) {
  let dms1 = loc2dms(lat);
  let dms2 = loc2dms(lng);
  return dms1.concat(dms2).join(',');
}

function loc2dms(latOrLng) {
  let d = latOrLng ? parseInt(latOrLng, 10) : '';
  let m = latOrLng ? parseInt((latOrLng - d) * 60, 10) : '';
  let s = latOrLng ? Math.round(((latOrLng - d) * 60 - m) * 60 * 100) / 100 : '';
  // console.log('loc to dms::::', latOrLng, d, m, s);
  return [d, m, s];
}

export function stringToLatlng(lat, lng) {
  let latDegree = '', latMinute = '', latSecond = '';
  let lngDegree = '', lngMinute = '', lngSecond = '';
  let part = 0;
  let flag = false;
  for (let i = 0; i < lat.length; i++) {
    let c = lat.substr(i, 1);
    if (!isNaN(c) || c === '.') {
      if (part === 0) {
        latDegree += c;
      } else if (part === 1) {
        latMinute += c;
      } else if (part === 2) {
        latSecond += c;
      }
      flag = true;
    } else {
      if (flag) {
        part++;
        flag = false;
      }
    }
  }

  part = 0;
  flag = false;
  for (let i = 0; i < lng.length; i++) {
    let c = lng.substr(i, 1);
    if (!isNaN(c) || c === '.') {
      if (part === 0) {
        lngDegree += c;
      } else if (part === 1) {
        lngMinute += c;
      } else if (part === 2) {
        lngSecond += c;
      }
      flag = true;
    } else {
      if (flag) {
        part++;
        flag = false;
      }
    }
  }

  return {
    lat: parseFloat(latDegree) + (parseFloat(latSecond) / 60 + parseInt(latMinute)) / 60,
    lng: parseFloat(lngDegree) + (parseFloat(lngSecond) / 60 + parseInt(lngMinute)) / 60
  }
}

export function meters2nm(meters) {
  return 1.0 * parseInt(100.0 * meters / 1852) / 100;
}

export function nm2meters(nm) {
  return nm * 1852;
}

